package br.com.kariri.smartschool.ui.util.window{

	import flash.display.DisplayObject;
	
	import mx.containers.Panel;
	import mx.core.Application;
	import mx.core.UIComponent;
	import mx.effects.Blur;
	import mx.effects.Fade;
	import mx.effects.Zoom;
	import mx.events.FlexEvent;
	import mx.managers.PopUpManager;

	[Style(name="headerHorizontalGap", type="Number", inherit="no")]
	/**
	 * @author Fabiel Prestes
	 */
	public class BaseCustomPanel extends Panel {

		/**
		 * Aqui será armazenado todos os componente FILHOS que serão adicionados
		 * ao HEADER
		 */
		[ArrayElementType("mx.core.UIComponent")]
		public var arrayFilhos:Array = [];

		private var blurIn:Fade;
		
		/**
		 * Construtor Padrao
		 */
		public function BaseCustomPanel() {
			super();
			
		}

		/**
		 * @inheritDoc
		 */
		override protected function childrenCreated():void {
			super.childrenCreated();

			configStyle();

			/* Para cada Filho adicionado no objeto 'arrayFilhos'
			 * será realizado algumas configurações como:
			 * Adiciona-lo no HEADER do PANEL
			 * Propriedade buttonMode = true ....*/
			for each (var child:UIComponent in arrayFilhos)
				addTitleBarComponent(child);
		}

		/**
		 * @private
		 */
		private function openWithEffect():void{

			
			blurIn = new Fade();
			
			blurIn.duration = 600;
			blurIn.play([this]);
			
		}
		
		/**
		 * Realizando a configuração padrão dos Estilos
		 */
		private function configStyle():void {
			this.setStyle("headerHorizontalAlign", "rigth");
			this.setStyle("headerVerticalAlign", "middle");
			this.setStyle("headerHorizontalGap", 5);
			this.setStyle("cornerRadius",0);
		}

		/**
		 * @inheritDoc
		 */
		override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
			super.updateDisplayList(unscaledWidth, unscaledHeight);

			settingHeader();
		}

		/**
		 * Reposiciona todos os componentes FILHOS ao PAI 'HEADER'
		 */
		protected function settingHeader():void {
			var componenteFilho:UIComponent;
			var posicaoX:Number = 0;
			var tamanhoPai:Number = 0;
			var posicaoY:Number = 0;
			var headerHorizontalGap:Number = getStyle('headerHorizontalGap');

			/* Caso não tenha sido adicionado Nenhum filho, deve apenas retornar e continuar
			 * o processamento natural. */
			if (arrayFilhos.length == 0)
				return;

			tamanhoPai = this.width - 10;

			/* Para cada filho Definido para ser adicionado no cabeçalho deve ser
			 * verificado seu tamanho para assim ser posicionado no componente HEADER do PANEL. */
			for (var i:int; i < arrayFilhos.length; i++) {
				componenteFilho = UIComponent(arrayFilhos[i]);
				componenteFilho.setActualSize(componenteFilho.getExplicitOrMeasuredWidth(), componenteFilho.getExplicitOrMeasuredHeight());

				/* Abaixo é pego a altura do HEADER do PANEL subtraido com a altura do COMPONENTE filho
				 * e DIVIDIDO por 2, afim de pegar o valor que será definido no Y. Desta maneira
				 * o filho ficará no meio do HEADER. */
				posicaoY = (getHeaderHeight() - componenteFilho.getExplicitOrMeasuredHeight()) / 2;

				/* Abixo é pego o tomanho total do PANEL subtraido com o tamanho total do COMPONENTE
				 * filho SUBTRAIDO com o HORIZONTAL GAP, afim de pegar o valor que será definido no X.
				 * Desta maneira os componente FILHOS ficarão sempre a DIREITA do PANEL.
				 * A variavel TAMANHOPAI e tambem sempre recebe o resultado desta subtração para que assim
				 * os FILHOS não irão ficar sobre postos um ao outro.*/
				posicaoX = tamanhoPai - componenteFilho.getExplicitOrMeasuredWidth() - headerHorizontalGap;
				tamanhoPai = posicaoX;

				/* Move o componente FILHO para o X e Y calculado anteriormente. */
				componenteFilho.move(posicaoX, posicaoY);
			}
		}

		/**
		 * Responsavel por Adicionar o Filho ao HEADER e realizar algumas pré configurações
		 */
		public function addTitleBarComponent(child:UIComponent):void {
			child.buttonMode = true;

			/* Este metodo é responsavel por adicionar o FILHO ao HEADER do PANEL. */
			titleBar.addChild(child);

			invalidateDisplayList();
		}
		
		public function openPanel():void{
			PopUpManager.addPopUp(this, DisplayObject(Application.application));
			PopUpManager.centerPopUp(this);
			
			this.y = 115;
			this.x = 200;
			
			//this.verticalCenter = 0;
			openWithEffect();
		}
	}
}